]> dgit.raspbian.org Git - gnome-shell.git/commitdiff
messageTray: Don't set _notificationRemoved if destroyed notification is queued
authormsizanoen1 <msizanoen@qtmlabs.xyz>
Sat, 15 Apr 2023 08:55:47 +0000 (15:55 +0700)
committerMarge Bot <marge-bot@gnome.org>
Mon, 17 Apr 2023 19:40:45 +0000 (19:40 +0000)
When the user clears all notifications from the notification menu UI, it's
possible for a queued notification to be destroyed after the currently displayed
notification. The removal of the currently displayed notification is not
processed until the notification menu is closed (due to `this._bannerBlocked`).
By then, it's possible that `_notificationRemoved` has already been overwritten
when `_onNotificationDestroy` is invoked with another (queued) notification.

This eventually results in a notification banner that cannot be removed by the
user as the notification object needed to do so has already been destroyed.

Fix this by only assigning to `_notificationRemoved` if `this._notification ==
notification`.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2736>

js/ui/messageTray.js

index e001f2202b2ec5334c28f67b9afbb5cb3e4944b1..1edd932f63fb56a9f92247fef714ea111b98124f 100644 (file)
@@ -1006,9 +1006,8 @@ var MessageTray = GObject.registerClass({
     }
 
     _onNotificationDestroy(notification) {
-        this._notificationRemoved = this._notification === notification;
-
-        if (this._notificationRemoved) {
+        if (this._notification === notification) {
+            this._notificationRemoved = true;
             if (this._notificationState === State.SHOWN ||
                 this._notificationState === State.SHOWING) {
                 this._updateNotificationTimeout(0);